# 动态柱状图的绘制
# GDP动态柱状图
from pyecharts.charts import Timeline
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType


# 读取文件
f = open("1960-2019全球GDP.csv","r",encoding="GB2312")
data_GPT_lines = f.readlines()        # 按行读取
f.close()
data_GPT_lines.pop(0)     # 删除第一行无用数据

# 将数据转换为字典存储
# 定义一个字典对象
data_GPT_dict = {}

for line in data_GPT_lines:
    data_list = line.split(",")
    year = int(data_list[0])      # 年份
    country = data_list[1]        # 国家
    gdp =  float(data_list[2])    # gdp数据
    # 如何判断字典里面有没有指定的key
    try:
        data_GPT_dict[year].append([country,gdp])
    except KeyError:
        data_GPT_dict[year] = []
        data_GPT_dict[year].append([country,gdp])


# 创建时间线对象
timeline = Timeline({"theme":ThemeType.LIGHT})

# 排序年份
sorted_year_list = data_GPT_dict.keys()
sorted_year_list = sorted(sorted_year_list,reverse=False)
# 对 gdp 进行列表排序
for year in sorted_year_list:
    data_GPT_dict[year].sort(key = lambda element:element[1],reverse=True)     # 对每一年的数据进行排序——降序排列
    # 取本年份前八位元素
    year_data_GPT = data_GPT_dict[year][0:8]
    # 确定柱状图x,y轴
    x_data = []
    y_data = []
    for country_gdp in year_data_GPT:
        x_data.append(country_gdp[0])
        y_data.append(country_gdp[1] / 100000000)

    # 构建柱状图对象
    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(xaxis_data=x_data)
    bar.add_yaxis("GDP/(亿)",y_data,label_opts=LabelOpts(position="right"))
    bar.reversal_axis()
    # 设置每一年的图表的标题
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年 GDP 数据变化",pos_left="center",pos_bottom="1%")
    )


    timeline.add(bar,str(year))



# 设置时间线柱状图循环播放
timeline.add_schema(
    play_interval=500,
    is_timeline_show=False,
    is_auto_play=True,
    is_loop_play=False
)

# 绘图
timeline.render("1960-2019全球GDP前八国家.html")
